糟糕的软件设计决策如何让她命丧优步无人驾驶汽车车轮下?
美国国家运输安全委员会 (NSTB) 发布最新报告称,优步自动驾驶汽车在撞到行人伊莱恩·赫茨伯格 (Elaine Herzberg) 的五秒之前曾检测到她的存在。不幸的是,一系列糟糕的软件设计决策导致软件在亚利桑那州坦佩市发生命案的0.2秒前才采取措施。
命案发生在2018年3月,NTSB在当年5月份发布的首份报告中明确指出,编写糟糕的软件而非硬件才是杀害赫茨伯格的罪魁祸首。当地时间本周二,NTSB发布新报告,为 NTSB 长达20个月的调查划上句号。这份新报告详细说明了优步软件是如何运作的以及在车祸发生前的最后几秒内,为何一切都变得失控。
分类错误
和多数自动驾驶软件一样,优步的软件试图将所检测到的每个对象都分门别类,如“汽车”、“自行车”或“其它”类别。之后软件根据这种分类计算对象的速度以及可能的轨迹。然而,该系统最终失败,惨败在坦佩市。
报告说明了软件在接近赫茨伯格前的数秒内正在“思考”,当时赫茨伯格正在远离人行横道的多车道道路上推着一辆自行车:
撞击前5.2秒,系统将赫茨伯格归类为“其它”对象。
撞击前4.2秒,赫茨伯格被重新归类为“车辆”。
撞击前3.8秒至2.7秒之间,赫茨伯格的归类数次在“车辆”和“其它”之间跳转。
撞击前2.6秒,赫茨伯格和她的自行车被归类为“自行车”。
撞击前1.5秒,赫茨伯格被重新归类为“未知”。
撞击前1.2秒,赫茨伯格再次被归类为“自行车”。
在此事件序列中,有两点值得注意。首先,系统从未将赫茨伯格归类为“行人”。根据 NTSB 的说法,这是因为“系统设计并未考虑到人行横道”。
第二点,不断变换的归类第一阻止了软件准确地计算赫茨伯格的轨迹,第二未意识到她正在位于和汽车发生碰撞的路径。你可能会认为如果自动驾驶系统看到某对象正在进入车辆的行驶路径,即使它不确定这种对象是什么,它都会踩刹车。但优步软件的设计并非如此。
优步系统通过之前观察到的对象的位置计算其速度并预测其未来的路径。然而,报告指出,“如果感知系统更改了对所检测到的对象的分类,则系统在生成新的轨迹时不再考虑对该对象的追踪历史”。
在真实世界中,它意味着,因为系统无法获悉对象赫茨伯格及其自行车属于哪种分类,所以系统就会认为她并没有移动。
在车祸发生前的5.2秒至4.2秒期间,系统将赫茨伯格判断为车辆并认为她当时是“静态的”也就是并未移动,因此判断她不可能进入车道。稍后,系统意识到她是移动的但预测她会停留在她所在的当前车道中。
当系统在车祸发生前的2.6秒将她重新归类为“自行车”时,系统再次预测她将会继续停留在她所在的车道——如果已经丢掉此前的位置数据的话,就更容易产生这种错误。在车祸发生前的1.5秒,她被判断为“未知”对象并再次被分类为“静态的”。
而在车祸发生前的1.2秒,当她开始进入SUV车道时,系统意识到即将发生车祸。
“动作压制”
在这个时间点,很可能已经无法避免车祸的发生,但踩刹车可能会让车辆减速并挽救赫茨伯格的性命。但这只存在于假设中。NTSB 在报告中解释称,“当系统检测到紧急情况时,它启动了动作压制措施。当系统验证了所检测到的危险的性质并计算替代路径或者驾驶员控制车辆时,自动驾驶系统压制了所计划设定的制动措施,而这一切仅仅发生在一秒的时间内。”
NTSB 表示,根据优步的说法,该公司“考虑到正在开发识别误报的自动检测系统,因此采取了动作压制程序,从而导致车辆实施了不必要的极端动作。”
结果,优步无人驾驶车辆直到车祸发生前的0.2秒才开始启动制动,导致赫茨伯格的生命被永远定格。
NTSB 表示,即使经过1秒的延迟,系统并不一定会全力制动。如果可以通过硬制动避免碰撞,那么系统会采取硬制动,直至达到固定的最大减速度。但是,如果碰撞的发生是不可避免的,那么系统会施加较小的制动力,在警告驾驶员接管的同时采取“渐进减速”的方法。
Business Insider 曾在2018年发布的一份报告可能会解释这些令人费解的设计决策:该团队准备向优步新任首席执行官 Dara Khosrowshahi 展示一次演示驾驶。工程师被告知要减少驾驶员所经历的“糟糕体验”的数量。不久之后,优步宣布正在“关闭车辆自行做出紧急决定的能力,如踩刹车或急转弯”。
急转弯功能最后得以重新启动,但在车祸发生前对硬制动的限制依然如旧。
优步汽车配置的是沃尔沃 XC90 系统,该系统本身具有先进的紧急制动系统。遗憾的是,在2018年车祸发生前,本来计划的是如优步自己的技术可用,则优步将自动禁用沃尔沃的防撞系统。NTSB指出优步这样做的其中一个原因是,优步的实验雷达和沃尔沃的雷达使用了相同的频率,存在干扰风险。
车祸发生后,优步已经重新设计了雷达,使其适用的频率多于沃尔沃的雷达,在优步测试自动驾驶技术的同时允许使用沃尔沃的紧急制动系统。
优步表示已经重新设计了软件的其它方面。在紧急情况下进行刹车之前不再设定“动作压制”期。另外,当对象的分类变更时,软件也不再丢弃对象以往的位置信息。
奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的产品线。